Python BeautifulSoup webcrawling在链接中获取文本标签

时间:2015-06-26 18:28:47

标签: python beautifulsoup web-crawler

Image

我需要在“< b>”中获取信息每个网站的标签。

response = requests.get(href)
    soup = BeautifulSoup(response.content, "lxml")  # or BeautifulSoup(response.content, "html5lib")
    tempWeekend = []
    print soup.findAll('b')

soup.findAll('b')行打印网站中的所有b标签,如何将其限制为我想要的日期?

网站为http://www.boxofficemojo.com/movies/?page=weekend&id=catchingfire.htm,位于周末标签下。

5 个答案:

答案 0 :(得分:2)

使用CSS选择器进行搜索通常最简单,例如

soup.select('table.chart-wide > tr > td > nobr > font > a > b')

答案 1 :(得分:1)

可悲的是,如果没有进一步识别标签,则无法选择特定的标签。 BeautifulSoup应该如何区分它们。如果您知道在需要的标签中大致期望什么,您可以迭代所有标签并检查它们是否匹配:

for b in soup.findAll('b):
    if b.innerHTML == whatever:
        return b

或类似的......

或者你可以得到周围的标签,例如你的例子中的'a'并检查是否匹配,然后下次出现'b'

答案 2 :(得分:1)

为什么不搜索所有b代码,并选择包含一个月的代码?

import requests
from bs4 import BeautifulSoup

s  = requests.get('http://www.boxofficemojo.com/movies/?page=weekend&id=catchingfire.htm').content

soup = BeautifulSoup(s, "lxml")  # or BeautifulSoup(response.content, "html5lib")
dates = []
for i in soup.find_all('b'):
    if i.text.split()[0].upper() in "JAN FEB MAR APR JUN JUL AUG SEP OCT NOV DEC":
        dates.append(i.text)

print dates

注意:我没有检查网站使用的确切缩写。请先检查这些并相应修改代码)

答案 3 :(得分:0)

查看该页面时,它没有任何divclassid标签,这使得它变得艰难。唯一可以看到日期之前<b>标记为<b>Date:</b>的内容的模式是<b>。我将迭代cellTable = new CellTable<TaskSchedule>(); TextColumn<TaskSchedule> taskNameColumn = new TextColumn<TaskSchedule>() { @Override public void render(Cell.Context context, TaskSchedule object, SafeHtmlBuilder sb) { String taskName = getValue(object); @Override public String getValue(TaskSchedule object) { return object.getTaskKey(); } }; cellTable.addColumn(taskNameColumn, "Task Name"); cellTable.addColumn(createCheckBoxColumn(0), "Monday"); cellTable.addColumn(createCheckBoxColumn(1), "Tuesday"); cellTable.addColumn(createCheckBoxColumn(2), "Wednesday"); cellTable.addColumn(createCheckBoxColumn(3), "Thursday"); cellTable.addColumn(createCheckBoxColumn(4), "Friday"); cellTable.addColumn(createCheckBoxColumn(5), "Saturday"); cellTable.addColumn(createCheckBoxColumn(6), "Sunday"); cellTable.setColumnWidth(cellTable.getColumn(0), 36, Style.Unit.PCT); cellTable.setColumnWidth(cellTable.getColumn(1), 9, Style.Unit.PCT); cellTable.setColumnWidth(cellTable.getColumn(2), 9, Style.Unit.PCT); cellTable.setColumnWidth(cellTable.getColumn(3), 9, Style.Unit.PCT); cellTable.setColumnWidth(cellTable.getColumn(4), 9, Style.Unit.PCT); cellTable.setColumnWidth(cellTable.getColumn(5), 9, Style.Unit.PCT); cellTable.setColumnWidth(cellTable.getColumn(6), 9, Style.Unit.PCT); cellTable.setColumnWidth(cellTable.getColumn(7), 9, Style.Unit.PCT); cellTable.setRowData(taskSchedules); 标签,然后在我点击其中的日期后收集标签。

答案 4 :(得分:0)

我会尝试像

这样的东西
all_a = site.find_all('a')
for a in all_a:
    if '?yr=?' in a['href']:
        dates.append(a.get_text())