将链接从 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 并打印剥离的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 bs4 打印第一个 google 搜索结果链接?

在 Python 中使用 BS4、Selenium 抓取动态数据并避免重复

迭代并打印dir中的所有符号链接

我的if语句在bs4标签元素中查找失败有什么理由吗?

selenium自动获取王者荣耀英雄海报并保存到本地

selenium自动获取王者荣耀英雄海报并保存到本地