python爬虫的突发奇想

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抓取多个网页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值