码迷,mamicode.com
首页 > 编程语言 > 详细

python 嵌套爬取网页信息

时间:2019-07-11 20:00:13      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:信息   列表   requests   parent   range   targe   cep   turn   safari   

当需要的信息要经过两个链接才能打开的时候,就需要用到嵌套爬取。

比如要爬取起点中文网排行榜的小说简介,找到榜单网址:https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=1

将榜单上的小说链接爬出来,在从小说链接里面爬小说简介

 

import pymysql
import requests
from hashlib import md5
import re
import os

#获取网页源代码
def get_one_page(url):
    # 设置请求头,防止被网站屏蔽
    headers = {
        User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64)\
         AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36,
    }
    try:
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except requests.HTTPError as e:
        print("由于某种原因获取页面出现错误!"+str(e))

#爬出目标信息所在的网址
def parse_page1(url,list):
    #获取网页内容
    html=get_one_page(url)
    #将正则表达式编译成正则表达式对象
    pattern=re.compile(<h4><a href="(.*?)" target="_blank" data-eid,re.S)
    #正则表达式1匹配的是目标信息的网址
    contents = re.findall(pattern, html)
    for i in contents:
        list.append(i)#向列表添加对象
    return list

#从网址中爬出目标信息
def parse_page2(url,list):#信息
    #获取网页内容
    url=https:+url#############要注意爬出的网址是否完整,不完整记得补全,否则会出错
    html=get_one_page(url)
    #将正则表达式编译成正则表达式对象
    pattern=re.compile(<p class="intro">(.*?)</p>,re.S)
    #正则表达式2匹配的是目标信息
    contents = re.findall(pattern, html)
    for i in contents:
        list.append(i)#向列表添加对象
    return list

# info_list存的是目标信息的网址
info_list=[]

start_url=https://www.qidian.com/all
info_list=parse_page1(start_url,info_list)

# range()包头不包尾`
for i in range(1,4):#range(4,1,-1),-1表示顺序递减
    url = https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page= + str(i)
    info_list = parse_page1(url, info_list)

#输出目标网址

cnt=0
for i in info_list:
    cnt=cnt+1
    i=https:+i
    print(i)

#输出网址数量

print("一共有"+str(cnt)+"条数据")

# x_list存的是目标信息,从目标信息所在的网址爬出需要的目标信息
x_list=[]
for i in info_list:
    x_list=parse_page2(i,x_list)
    

#输出目标信息
for i in x_list:
    print(i)
#如果爬的数量比较多,要等久一会才有输出

 

python 嵌套爬取网页信息

标签:信息   列表   requests   parent   range   targe   cep   turn   safari   

原文地址:https://www.cnblogs.com/-citywall123/p/11172059.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!