网页文章采集工具(网站页面的url提取信息路径(如下)提取路径)
优采云 发布时间: 2022-02-18 09:26网页文章采集工具(网站页面的url提取信息路径(如下)提取路径)
首先我们确认网站页面的url地址为: 打开页面拖到底部,可以看到下图:
看到有一个传统的翻页按钮,然后我们可以点击不同的页面来确认url地址是:
没有动态加载,不同的页面只是最终数量不同。可以确认每个页面的url为:
{i},代码如下:
urls = ['http://star.iecity.com/all/0/p{}'.format(i) for i in range(1,11)]
(2)确定爬取节点
有了全局页面的url地址,就可以开始使用lxml库获取网页信息进行解析,获取具体的爬取信息。鼠标右键单击“检查”,如下图:
通过网页的html中信息的对应搜索,可以找到li对应的每个人的详细信息。图中红框主要是链接和名称,供以后使用。由于我们需要进入详情页获取更多的字段信息,所以我们要确认详情页的地址是:
这个地址下面的数字串:56495451和上面红框中的链接href是一模一样的,所以我们可以通过首页获取这个地址,然后构造一个新的url,自动获取到详情页的链接为如下:
url_new=''+href
然后我们继续通过详情页的html查看详情页对应的字段信息如下图:
可以看到每个人的性别、国籍、籍贯、生日、职业、身高、体重、星座等信息。通过右键单击并选择 Copy->Copy XPath 来提取信息路径。详细代码如下:
html=requests.get(url,headers=headers)
# print('第一层调用是否返回正常:',html)
html.encoding = html.apparent_encoding # 将乱码进行编码
selector=etree.HTML(html.text)
sex = selector.xpath('//*[@id="Left"]/div[2]/div[2]/p[1]/text()')[0]
country = selector.xpath('//*[@id="Left"]/div[2]/div[2]/p[2]/text()')[0]
jiguan = selector.xpath('//*[@id="Left"]/div[2]/div[2]/p[3]/text()')[0]
birthday = selector.xpath('//*[@id="Left"]/div[2]/div[2]/p[4]/text()')[0]
vocation = selector.xpath('//*[@id="Left"]/div[2]/div[2]/p[5]/text()')[0]
height = selector.xpath('//*[@id="Left"]/div[2]/div[2]/p[6]/text()')[0]
weight = selector.xpath('//*[@id="Left"]/div[2]/div[2]/p[7]/text()')[0]
xingzuo = selector.xpath('//*[@id="Left"]/div[2]/div[2]/p[8]/text()')[0]
评论:
1、对于某些字段,信息太多,可能提取不出来,所以需要截取字段信息。避免输出异常
2、对于一些不完整的字段,需要抛出异常,否则很容易报错。
(3)将爬取信息存入数据库
这里我们将爬取的信息存储到数据库中,我们需要连接数据库并创建一个数据库表用于后续存储。数据连接和建表代码如下:
db = pymysql.connect(host='localhost', user='root', passwd='密码', db='库名称:Learn_data', port=3306, charset='utf8')
print("数据库连接")
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS Learn_data.star_info_fenxi")
sql = """CREATE TABLE IF not EXISTS Learn_data.star_info_fenxi (
idd int auto_increment primary key,
url_id CHAR(100),
id CHAR(100),
num CHAR(100),
name CHAR(100),
sex CHAR(100),
country CHAR(100),
jiguan CHAR(100),
birthday CHAR(100),
vocation CHAR(100),
height CHAR(100),
weight CHAR(100),
xingzuo CHAR(100)
)
DEFAULT CHARSET=utf8"""
cursor.execute(sql)
爬取的数据存储在表中,代码如下:
cursor.execute(
"insert into star_info_fenxi (url_id,id,num,name,sex,country,jiguan,birthday,vocation,height,weight,xingzuo)"
"values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
(str(url_id),str(id),str(i), str(name), str(sex), str(country), str(jiguan), str(birthday), str(vocation)
, str(height), str(weight), str(xingzuo)))
最后,必须使用:mit() 关闭数据库,否则数据将无法正确存储在表中。
3、爬取结果
最后,我们通过整合上面的代码就可以正常爬取了。存储结果截图如下:
4、写在最后
数据采集部分就结束了,接下来就是利用数据进行分析。总结一下该方案的不足之处如下:
(1)本程序为单线程,未使用多线程,执行效率有待提高
(2)页面的字段信息可能有错行,需要优化程序的兼容性
5、下一集预告:
对于采集的这些字段,你可能觉得很简单,但很多时候数据分析就是通过简单的外表看本质。我们将通过这些领域分析哪些问题?让我给你预览几个有趣的分析点:
(1)娱乐圈男女明星差距有多大,谁的职业寿命更长?
(2)如果你想当明星,是不是跟星座有关,哪个星座最有可能走红?
(3)与其他国家相比,我们国家的娱乐活动多吗?
(4)娱乐圈是不是好女孩的标杆百
(5)娱乐圈主要看脸,身高不是问题
(6)娱乐明星事业不断多元化,才能走得更远
结尾
----