weixin_39025589
weixin_39025589
采纳率100%
2021-04-11 23:30

新手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 weixin_45115418 25天前

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

    点赞 1 评论 复制链接分享
  • software7503 CSDN技术专家团-赖老师(软件之家) 26天前

    404就表示你爬的路径是错的了。

    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 25天前

    您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 评论 复制链接分享

相关推荐