网页文章采集工具(网站页面的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)娱乐明星事业不断多元化,才能走得更远

  结尾

  ----

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线