python 嵌套爬取网页信息

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

比如要爬取起点中文网排行榜的小说简介,找到榜单网址: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)
#如果爬的数量比较多,要等久一会才有输出

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

时间: 2024-08-16 03:58:46

python 嵌套爬取网页信息的相关文章

Python爬取网页信息

Python爬取网页信息的步骤 以爬取英文名字网站(https://nameberry.com/)中每个名字的评论内容,包括英文名,用户名,评论的时间和评论的内容为例. 1.确认网址 在浏览器中输入初始网址,逐层查找链接,直到找到需要获取的内容. 在打开的界面中,点击鼠标右键,在弹出的对话框中,选择“检查”,则在界面会显示该网页的源代码,在具体内容处点击查找,可以定位到需要查找的内容的源码. 注意:代码显示的方式与浏览器有关,有些浏览器不支持显示源代码功能(360浏览器,谷歌浏览器,火狐浏览器等

[python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

[python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pythonpython爬虫正则表达式html知识总结 2016-04-07 06:13 3615人阅读 评论(4) 收藏 举报  分类: Python爬虫(23)  Python基础知识(17)  版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ 这篇文章主要是介绍Pytho

python学习之——爬取网页信息

爬取网页信息 说明:正则表达式有待学习,之后完善此功能 #encoding=utf-8 import urllib import re import os #获取网络数据到指定文件 def getHtml(url,fname): #fname = 'C:\\Users\cuiliting\\Desktop\\weather_forecast.txt' data =[] page = urllib.urlopen(url) html = page.read() data.append(html)

常用正则表达式爬取网页信息及HTML分析总结

Python爬取网页信息时,经常使用的正则表达式及方法. 1.获取<tr></tr>标签之间内容 2.获取<a href..></a>超链接之间内容 3.获取URL最后一个参数命名图片或传递参数 4.爬取网页中所有URL链接 5.爬取网页标题title两种方法 6.定位table位置并爬取属性-属性值 7.过滤<span></span>等标签 8.获取<script></script>等标签内容 1). 获取&

python之爬取网页数据总结(一)

今天尝试使用python,爬取网页数据.因为python是新安装好的,所以要正常运行爬取数据的代码需要提前安装插件.分别为requests    Beautifulsoup4   lxml  三个插件. 因为配置了环境变量,可以cmd命令直接安装.假如电脑上有两个版本的python,建议进入到目录安装. 安装的命令为 pip install requests(Beautifulsoup4   /lxml  ) 三条分别执行. 安装结束,可以尝试网上一些简单的例子,明白了解 Beautifulso

第一周、学会爬取网页信息总结

目标:爬取网页,获得自己需要的信息 步骤: 1. 导入需要的模块2. 利用request向目标网站获得网页信息3. 用BeautifulSoup解析所获得的网页 3. 获得需要的信息所在的标签内容 4. 精简标签获得关键信息5. 获得关键信息之后,再处理(比如比大小) 1.导入需要的模块 BeautifulSoup模块: BeautifulSoup:是一个可以从HTML和XML中读取数据的库.库也叫模块,在笨办法学Python中叫做特征,是其他程序员开发好的一些代码,可以拿来导入(import)

python动态爬取网页

简介 有时候,我们天真无邪的使用urllib库或Scrapy下载HTML网页时会发现,我们要提取的网页元素并不在我们下载到的HTML之中,尽管它们在浏览器里看起来唾手可得. 这说明我们想要的元素是在我们的某些操作下通过js事件动态生成的.举个例子,我们在刷QQ空间或者微博评论的时候,一直往下刷,网页越来越长,内容越来越多,就是这个让人又爱又恨的动态加载. 爬取动态页面目前来说有两种方法 分析页面请求 selenium模拟浏览器行为 1.分析页面请求 键盘F12打开开发者工具,选择Network选

生成器的应用,爬取网页信息

#需求:生成器的应用 #然后每次g.send(url),打印页面内容,利用g可以无限send 1 from urllib.request import urlopen #导入爬虫模块 2 def get(): 3 while True: 4 url = yield #将函数改成协程函数 5 print(urlopen(url).read()) #打印爬取网页的结果 6 7 g = get() #将函数改成生成器 8 next(g) #初始化生成器 9 g.send("http://www.bai

python 闭包 爬取网页

1 >>> import requests 2 3 #闭包:让数据常驻内存,多次需要的时候会加快速度,无需重新获取费时间 4 >>> def fun(): 5 r = requests.get("http://www.biqukan.cc/book/45705/").text 6 def temp(): 7 return r 8 return temp() 9 10 >>> ma = fun() 11 >>> t1