python抓取动态网页(编程环境操作系统:Win10编程语言:Python3.6(二))

优采云 发布时间: 2022-03-12 22:04

  python抓取动态网页(编程环境操作系统:Win10编程语言:Python3.6(二))

  (一)编程环境

  操作系统:赢 10

  编程语言:Python 3.6

  (二)安装硒

  这是使用硒实现的。

  如果没有安装python的selenium库,安装命令如下

  pip install selenium

  (三)下载ChromeDriver

  因为selenium使用的是浏览器驱动,这里我使用的是谷歌Chrome浏览器,所以先下载ChromeDriver.exe,放到C:\Program Files(x86)\Google\Chrome\Application\目录下。

  注意,也可以放到别的目录下,只要在代码中填写正确的路径即可。

  

  (四)登录微博

  一般来说,m站的网页结构要比pc站简单很多,我们可以从m站开始。微博m站登录界面的网址是

  在Chrome浏览器中打开这个地址,在界面任意位置右键->查看网页源码,发现邮箱/手机号框的id是loginName,密码输入框的id是loginPassword ,登录按钮的id是loginAction。

  from selenium import webdriver

import time

#全局变量

driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")

def loginWeibo(username, password):

driver.get('https://passport.weibo.cn/signin/login')

time.sleep(3)

driver.find_element_by_id("loginName").send_keys(username)

driver.find_element_by_id("loginPassword").send_keys(password)

driver.find_element_by_id("loginAction").click()

#driver.close()

  执行后可以看到自动登录的流程和登录成功的界面

  

  (五)爬取微博内容

  从微博抓取内容有两种方式:

  (1)申请成为新浪开发者并调用微博API

  (2)使用爬虫

  因为微博API有很多限制,比如只能获取用户最新的10条微博内容,而不能获取所有的历史微博内容。

  这里我们使用爬虫方法。

  程序如下:

<p>from selenium import webdriver

import time

import re

#全局变量

driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")

def loginWeibo(username, password):

driver.get(&#39;https://passport.weibo.cn/signin/login&#39;)

time.sleep(3)

driver.find_element_by_id("loginName").send_keys(username)

driver.find_element_by_id("loginPassword").send_keys(password)

driver.find_element_by_id("loginAction").click()

#这里只是看一下cookie内容,下面不会用到这个cookie值,因为driver会把cookie自动带过去

cookies = driver.get_cookies()

cookie_list = []

for dict in cookies:

cookie = dict[&#39;name&#39;] + &#39;=&#39; + dict[&#39;value&#39;]

cookie_list.append(cookie)

cookie = &#39;;&#39;.join(cookie_list)

print (cookie)

#driver.close()

def visitUserInfo(userId):

driver.get(&#39;http://weibo.cn/&#39; + userId)

print(&#39;********************&#39;)

print(&#39;*敏*感*词*&#39;)

# 1.用户id

print(&#39;用户id:&#39; + userId)

# 2.用户昵称

strName = driver.find_element_by_xpath("//div[@class=&#39;ut&#39;]")

strlist = strName.text.split(&#39; &#39;)

nickname = strlist[0]

print(&#39;昵称:&#39; + nickname)

# 3.微博数、粉丝数、关注数

strCnt = driver.find_element_by_xpath("//div[@class=&#39;tip2&#39;]")

pattern = r"\d+\.?\d*" # 匹配数字,包含整数和小数

cntArr = re.findall(pattern, strCnt.text)

print(strCnt.text)

print("微博数:" + str(cntArr[0]))

print("关注数:" + str(cntArr[1]))

print("粉丝数:" + str(cntArr[2]))

print(&#39;\n********************&#39;)

# 4.将用户信息写到文件里

with open("userinfo.txt", "w", encoding = "gb18030") as file:

file.write("用户ID:" + userId + &#39;\r\n&#39;)

file.write("昵称:" + nickname + &#39;\r\n&#39;)

file.write("微博数:" + str(cntArr[0]) + &#39;\r\n&#39;)

file.write("关注数:" + str(cntArr[1]) + &#39;\r\n&#39;)

file.write("粉丝数:" + str(cntArr[2]) + &#39;\r\n&#39;)

def visitWeiboContent(userId):

pageList = driver.find_element_by_xpath("//div[@class=&#39;pa&#39;]")

print(pageList.text)

pattern = r"\d+\d*" # 匹配数字,只包含整数

pageArr = re.findall(pattern, pageList.text)

totalPages = pageArr[1] # 总共有多少页微博

print(totalPages)

pageNum = 1 # 第几页

numInCurPage = 1 # 当前页的第几条微博内容

curNum = 0 # 全部微博中的第几条微博

contentPath = "//div[@class=&#39;c&#39;][{0}]"

#while(pageNum

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线