python爬虫一定要把请求,搜索,采集,保存等,分步骤来写代码,这样才方便整理和阅读,多用一用def没错。从这篇突发奇想的博客发布开始,我再也写那种一锅粥的代码啦!!
以这片代码为例
import json #数据交换格式 from multiprocessing import Pool #多线程秒抓 import requests #请求网页获取源代码 from requests.exceptions import RequestException #错误 import re #正则表达式筛选有用信息 import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #适应编码格式 def get_one_page(url): #获取网页源代码 try: header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'} response = requests.get(url,headers = header) #用url和请求头请求网页 if response.status_code == 200: #判断响应是否正常 return response.text return None except RequestException: return None def parse_one_page(html): #正则表达式筛选信息 pattern = re.compile('<div class="channel-detail movie-item-title".*?>.*?<a href="/films/.*?" target="_blank".*?>(.*?)</a></div>',re.S) items = re.findall(pattern,html) #将筛选格式与源代码对比 for item in items: #将信息格式化 yield { #转换生成器 'index' : item[0] } def write_to_file(content): #将信息存入指定文件 with open('result.txt','a' ,encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False) + '\n') #写入信息 f.close() #信息写入完毕,保存并关闭文件 def main(offset): #开启循环抓取所有网页 url = 'http://maoyan.com/films?catId=6&offset=' + str(offset) #指定网站+对应值 html = get_one_page(url) #读取相应网页的信息并将其格式化并赋值给html for item in parse_one_page(html): print(item) write_to_file(item) #调用函数将信息写入文件 if __name__ == '__main__': #秒抓 pool = Pool() pool.map(main,[i*30 for i in range(10)]) #循环调用main抓取多个网页