鱼C论坛

 找回密码
 立即注册
查看: 3605|回复: 4

爬虫爬出来的网页是空白的,求纠错

[复制链接]
发表于 2019-3-26 14:40:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下代码的作用是 在百度贴吧输入搜索内容然后爬取其中的网页,但保存的文件是空白,求纠错,谢谢。
注:需要填搜索内容,跟页数,如内容是“苹果”,页数是“5”


from urllib.request import Request,urlopen
from urllib.parse import urlencode
from fake_useragent import UserAgent
import re

def get_html(url):
    headers = {
        "User-Agent": UserAgent().chrome
    }
    request = Request(url,headers = headers)
    response = urlopen(request)
    print(response.read().decode())
    return response.read()

def save_html(filename,html_bytes):
    with open(filename,"wb")as f:
        f.write(html_bytes)

def main():
    content = input("请输入要下载的内容:")
    num = input("请输入要下载多少页:")
    base_url = "http://tieba.baidu.com/f?ie=utf-8&{}"
    for pn in range(int(num)):
        args = {
            "pn": pn * 50,
            "kw": content
        }
        filename = "第" + str(pn + 1) + "页.html"
        args = urlencode(args)
        print("正在保存"+ filename)
        html_bytes = get_html(base_url.format(args))
        save_html(filename,html_bytes)


if __name__ == "__main__":
    main()
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-3-26 15:08:42 | 显示全部楼层

改了个保存方式就好了

from urllib.request import Request, urlopen
from urllib.parse import urlencode
from fake_useragent import UserAgent
import re


def get_html(url):
    headers = {
        "User-Agent": 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    }
    request = Request(url, headers=headers)
    response = urlopen(request)
    # print(response.read().decode())
    return response.read().decode()


def save_html(filename, html_bytes):
    with open(filename, "w")as f:
        f.write(html_bytes)


def main():
    content = input("请输入要下载的内容:")
    num = input("请输入要下载多少页:")
    base_url = "http://tieba.baidu.com/f?ie=utf-8&{}"
    # url = 'http://tieba.baidu.com/f?kw=%E8%8B%B9%E6%9E%9C&ie=utf-8&pn=50'
    for pn in range(int(num)):
        args = {
            "pn": pn * 50,
            "kw": content
        }
        filename = "第" + str(pn + 1) + "页.html"
        args = urlencode(args)
        print("正在保存" + filename)
        html_bytes = get_html(base_url)
        save_html(filename, html_bytes)
        # print(html_bytes.decode())
        # with open('1.html', 'w') as f:
        #     f.write(html_bytes.decode())

if __name__ == "__main__":
    main()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-26 17:43:44 | 显示全部楼层
天羽妖月 发表于 2019-3-26 15:08
改了个保存方式就好了

from urllib.request import Request, urlopen

报错呢。。

Traceback (most recent call last):
  File "D:/Interest/Python/学习02_爬虫_20190316/day01/test.py", line 42, in <module>
    main()
  File "D:/Interest/Python/学习02_爬虫_20190316/day01/test.py", line 36, in main
    save_html(filename, html_bytes)
  File "D:/Interest/Python/学习02_爬虫_20190316/day01/test.py", line 19, in save_html
    f.write(html_bytes)
UnicodeEncodeError: 'gbk' codec can't encode character '\u2022' in position 74816: illegal multibyte sequence
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-27 18:59:19 | 显示全部楼层
  1. from urllib.request import Request, urlopen
  2. from urllib.parse import urlencode
  3. from fake_useragent import UserAgent
  4. import re


  5. def decode(data):
  6.     if isinstance(data, bytes):
  7.         try:
  8.             return data.decode('utf-8')
  9.         except Exception:
  10.             return data.decode('gb18030')
  11.     return data


  12. def get_html(url):
  13.     headers = {
  14.         "User-Agent": UserAgent().chrome
  15.     }
  16.     request = Request(url, headers=headers)
  17.     response = urlopen(request)
  18.     return response.read()


  19. def save_html(filename, html_bytes):
  20.     try:
  21.         html = decode(html_bytes)
  22.     except Exception as e:
  23.         print('解码失败!')
  24.         return

  25.     with open(filename, "w") as f:
  26.         f.write(html)


  27. def main():
  28.     content = input("请输入要下载的内容:")
  29.     num = input("请输入要下载多少页:")
  30.     base_url = "http://tieba.baidu.com/f?ie=utf-8&{}"
  31.     for pn in range(int(num)):
  32.         args = {
  33.             "pn": pn * 50,
  34.             "kw": content
  35.         }
  36.         filename = "第" + str(pn + 1) + "页.html"
  37.         args = urlencode(args)
  38.         print("正在保存" + filename)
  39.         html_bytes = get_html(base_url.format(args))
  40.         save_html(filename, html_bytes)


  41. if __name__ == "__main__":
  42.     main()
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-28 17:27:56 | 显示全部楼层

谢谢,有提示编码错误,但将 “with open(filename, "w") as f:”修改为“with open(filename, "w",encoding="utf-8"”就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-14 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表