# requests 用来发送http请求 bs4 用来解析网页 chardet 用来检测网页编码格式 import json import requests from bs4 import BeautifulSoup import chardet from lxml import html import xml # 存储爬取信息的文本文件。a为追加模式,新增信息始终放在已有的信息后面,这样已有的内容就不会被覆盖 f = open("E:info.txt", "a") # 要爬取信息的url,找网址的时候很可能出现假网址,网址里边进行了二次请求。可以通过找请求头内容的方式找到实际的网址 url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0" # 伪装爬虫,请求头的内容可以在浏览器中获得(打开网页,点击键键盘上的F12,出现控制台,点击网络,再点击XHR) header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0' , 'Connection': 'keep-alive' } # 此处for循环没有作用,本来想爬取10个网页的数据,但是发现豆瓣网页直接将一个模块的数据打包为json,全部获得 for i in range(1): # 用requests库的get方法与服务器进行连接,返回一个requests.models.Response的类 pageConnect = requests.get(url, headers=header) print(type(pageConnect)) # 用chardet库中detect方法获取网页的编码格式,返回的是dict字典,具体的编码格式在encoding这个键对应的值中 pageConnect.encoding = chardet.detect(pageConnect.content)['encoding'] # 设置好编码格式后,用text方法把pageConnect转化为字符串供beautifulSoup处理,但是本次直接得到了json, # 就不用再通过找便签来识别数据,所以解析网页的就注释了 page = pageConnect.text print(type(page)) # 用beautifulSoup进行解析网页,lxml是解析类型 # soup=BeautifulSoup(page,'lxml') # print(soup) # 进行h5标签选择 # ppp=soup.select('p')
# json.dumps():将字典转为字符串类型 # json.loads():将字符串转成dict类型 json_page = json.loads(page) print(json_page) newpages = json_page['subjects'] print(newpages) for x in range(len(newpages)): newpage = newpages[x] moviename = newpage['title'] print(moviename) f.write(moviename+' ')
参考文章:https://blog.csdn.net/guanmaoning/article/details/80158554