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

新手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条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog