# 爬取百度10页的标题 import urllib.request import re import urllib.parse def build_onepage_crawl_function(keyword, number_of_page): #构建请求头 user_agent_header = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0)") opener_build = urllib.request.build_opener() opener_build.addheaders = [user_agent_header] #对搜索关键词进行编码 encoded_keyword = urllib.parse.quote(keyword) # 通过for循环爬去每一页 for i in range(int(number_of_page)): url = "https://www.baidu.com" number_of_page = i * 10 # 构造 &pn= print(number_of_page) url = url + "/s?wd=" + encoded_keyword + "&pn=" + str(number_of_page) # 完整的url包括关键词说页数,这里keyword本身就是str print(url) #构造get请求中的url original_html = opener_build.open(url, timeout = 2).read().decode("utf-8","ignore") #构造正则表达式 re_search_word = 'data-tools=.{"title":"(.*?)",' re_search_result = re.compile(re_search_word).findall(original_html) #遍历每一个列表 for result in re_search_result: #写入文件 with open("C:/users/mike1/desktop/abc.txt", "a", encoding = "utf-8") as f: f.write(result + " ") #输入关键词以及需要爬取的页数 keyword_input = input("请输入关键词:") number_of_page_input = input("请输入页数:") build_onepage_crawl_function(keyword_input, number_of_page_input)
思路:
1、首先构造请求头,这里只加了user agent
2、 其次构造get请求,get包括搜索关键字 以及翻页。如果关键字为汉字,则要对汉字进行编码
3、通过for循环对每页内容爬取
4、通过正则表达式提取感兴趣的信息
5、将提取信息写入文件
结果显示,提取信息明显少于浏览器所见内容。可能漏掉了某些标签。