weixin_39025589 2021-04-11 23:30 采纳率: 50%
浏览 224
已采纳

新手python爬虫出来是404,User-Agent写上了

# -*- coding = utf-8 -*-
import os
import sys
import requests
from bs4 import BeautifulSoup   # 网站解析
import xlwt
import urllib.error, urllib.request     # 地址url的获取
import re   # 正则
import sqlite3  # sql操作
# 在解析获取网页后需要解码为utf-8 //decode('utf-8')
# post、get请求网站为httpbin.org


#影片详情链接的规则
findlink = re.compile(r'<a href="(.*?)">')     #创建正则表达式对象,表示规则(字符串的模式)
#影片图片
findImgSrc = re.compile(r'<img.*src="(.*?)"',re.S)   #re.S 让换行符包含在字符中
#影片片名
findTitle = re.compile(r'<span class="title">(.*)</span>')
#影片评分
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
#找到评价人数
findJudge = re.compile(r'<span>(\d*)人评价</span>')
#找到概况
findInq = re.compile(r'<span class="inq">(.*)</span>')
#找到影片的相关内容
findBd = re.compile(r'<p class="">(.*?)</p>',re.S)

def main():
    baseurl = "https://movie.douban.com/yop250?start="
    # req = requests.Request(url=baseurl,data=data, headers=headers,method="get")
    # headers = {"user-agent": ""} #m模拟真实浏览器请求头
    # response body中的内容可模拟真实浏览器访问user-agent
    #res = requests.Request(url=baseurl)
    datalist = getdata(baseurl)     # 获取数据
    # savapath = ".//存留.xls"       # savapath = r".//"  #r则不需要转义字符生效。
    # print("爬完了,可以查看数据")
    # askURL(https://)
    # 超时处理status=200:getheader值
    try:
        resource = urllib.request.urlopen(baseurl, timeout=0.5)
        print(resource.read().decode('utf-8'))  # 才能获取正常网页的值
    except urllib.error.URLError as e:
        print("time out")
# ——————————————————————————————————————————————————————————————————————————————
# 1.tag获取第一个标签
# f=open(./.....)
# html=f.read()
# bs=beautifulSoup(html,"html.parser")
# bs.属性.string
# 2.navigbleString标签里的字符串
# attr:是指对应的属性值:键值对(字典形式)
# 3.beautifulSoup是指整个文档的格式
# 4.注释会替换掉(comment)
# 遍历1.contents 获取所有的子节点,然后返回一个list
# 遍历2.children 获取子节点,然后返回一个生成器
# ctrl+/
# 搜索
# t.list = bs.find_all("a")查询所有的a
# Search查询于正则匹配。limit限制数量。
# t.list = bs.find_all(re.compile"a")
# re.compile包含(a)
# def xxxxx():
#    return tag.has_attr("属性名")
#
# select("title") #div标签 .class类名 ,#id,属性,子标签来寻找相关的信息



# ————————————————————————————————————————————————————————————————————————————
# 指定一个url的网站的内容
def askURL(url):
    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
    }
    request = urllib.request.Request(url, headers=headers)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
        print(html)

    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)  # 包含属性
        if hasattr(e, "reason"):
            print(e.reason)
    return html



def getdata(baseurl):
    datalist = []
    # 具体问题具体分析需要多少页一页多少数据
    for i in range(0, 10):
        url = baseurl + str(i*25)
        html = askURL(url)
        # 逐一解析bs4可以把每一html转换为python
        soup = BeautifulSoup(html, "html.parser")
        # 获取符合要求的字符串,并形成列表class后需要添加下划线(选择属性值)
        for item in soup.find_all('div', class_="item"):
            data = []
            item = str(item)
            # link获取影片超链接
            link = re.findall(findlink,item)[0]  # 确定规则
            # print(item)
            # data.append(link)
    return datalist


def savedata(savepath):
    print("保存")




# 调用程序
if __name__ == "__main__":
    main()
  • 写回答

3条回答 默认 最新

  • weixin_45115418 2021-04-12 09:21
    关注

    你的这个baseurl 我用浏览器去访问都是404 更别说是爬虫了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效