将链接从 selenium 迭代到 bs4 并打印剥离的字符串
Posted
技术标签:
【中文标题】将链接从 selenium 迭代到 bs4 并打印剥离的字符串【英文标题】:Iterate links from selenium into bs4 and print stripped strings 【发布时间】:2017-05-20 06:14:03 【问题描述】:意图:
1.使用 Selenium 访问 http://blogdobg.com.br/ 的主页。
2.识别文章链接
3.将每个链接插入bs4并拉取文字
问题: 我可以打印所有链接或将单个链接移动到 bs4 用于解析和打印。我阅读每个链接的尝试以多次迭代的同一个链接结束。
我两天前才开始学习自己,所以任何指点都将不胜感激。
from selenium import webdriver
from lxml import html
import requests
import re
from bs4 import BeautifulSoup
def read (html):
html = browser.page_source
soup = BeautifulSoup(html,"html.parser")
for string in soup.article.stripped_strings:
print(repr(string))
path_to_chromedriver = '/Users/yakir/chromedriver'
browser = webdriver.Chrome(executable_path = path_to_chromedriver)
url = 'http://blogdobg.com.br/'
browser.get(url)
articles = browser.find_elements_by_xpath("""//*[contains(concat( " ", @class, " " ), concat( " ", "entry-title", " " ))]//a""")
#get all the links
for link in articles:
link.get_attribute("href")
#Attempt to print striped string from each link's landing page
for link in articles:
read(link.get_attribute("href"))
##method for getting one link to work all the way through (currently commented out)
#article1 = articles[1].get_attribute("href")
#browser.get(article1)
#read(article1)
【问题讨论】:
【参考方案1】:首先,您的函数read()
具有html
参数,而您直接在此函数内定义html
变量。这毫无意义:无论如何,您的论点都会被忽略,BeautifulSoup(html,"html.parser")
将从html = browser.page_source
获得价值,但不会从论点html
获得价值
另一个问题:你不会得到所有链接与
for link in articles:
link.get_attribute("href")
您应该使用list
并在每次迭代时附加值:
link_list = []
for link in articles:
link_list.append(link.get_attribute("href"))
然后您可以使用以下链接:
for link in link_list:
r = requests.get(link)
...
# do whatever you want to do with response
【讨论】:
以上是关于将链接从 selenium 迭代到 bs4 并打印剥离的字符串的主要内容,如果未能解决你的问题,请参考以下文章