regex - 使用 Scrapy 'regex definition'

标签 regex python-2.7 scrapy

我一直在尝试生成一个脚本来从网站 https://services.aamc.org/msar/home#null 中抓取数据.我生成了一个 python scrapy 2.7 脚本来从网站上获取一段文本(此时我的目标是任何东西),但似乎无法让它工作。我怀疑这是因为我没有正确配置我的正则表达式来识别我试图从中抓取的 span 标签。有谁知道我可能做错了什么以及我如何解决它?

非常感谢。

马特


import urllib
import re

url = "https://services.aamc.org/msar/home#null"
htmlfile = urllib.urlopen(url)
htmltext = htmlfile.read()
regex = '<td colspan="2" class="schoolLocation">(.+?)</td>'
pattern = re.compile(regex)
price = re.findall(pattern, htmltext)
print "the school location is ",price

最佳答案

首先,don't use regular expressions to parse HTML .有称为 HTML 解析器的专门工具,如 BeautifulSouplxml.html

实际上,该建议与这个特定问题无关,因为不需要解析 HTML。 此页面上的搜索结果是从一个单独的端点动态加载的,浏览器向该端点发送 XHR 请求、接收 JSON 响应、解析它并借助在浏览器中执行的 javascript 显示搜索结果. urllib 不是浏览器,它只为您提供一个初始页面 HTML,其中包含一个空的搜索结果容器。

您需要做的是在您的代码中模拟XHR 请求。让我们使用 requests包裹。完整的工作代码,打印学校类(class)列表:

import requests


url = "https://services.aamc.org/msar/home#null"
search_url = "https://services.aamc.org/msar/search/resultData"

with requests.Session() as session:
    session.get(url)  # visit main page

    # search
    data = {
        "start": "0",
        "limit": "40",
        "sort": "",
        "dir": "",
        "newSearch": "true",
        "msarYear": ""
    }
    response = session.post(search_url, data=data)

    # extract search results
    results = response.json()["searchResults"]["rows"]
    for result in results:
        print(result["schoolProgramName"])

打印:

Albany Medical College
Albert Einstein College of Medicine
Baylor College of Medicine
...
Howard University College of Medicine
Howard University College of Medicine Joint Degree Program
Icahn School of Medicine at Mount Sinai

关于regex - 使用 Scrapy 'regex definition',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36990164/

相关文章:

javascript - 如果之前的文本等于则不替换

Java正则表达式匹配左边一个条件

python - 我该如何修复 NLTK 分块错误?

python - python如何在赋值运算符后赋值

python - 如何定义 scrapy shell 使用哪个蜘蛛?

c++ - 使用正则表达式在 visual studio 中选择由双换行符分隔的文本 block

regex - Emacs RegExp - 如何选择 CamelCase 单词?

mysql - Python django 外键 (1048, "Column ' USER_ID' cannot be null")

hyperlink - scrapy : allow is not defined when using Rule for link extraction

python - Scrapy-deploy 到 Scrapyd 不会安装 setup.py 中指出的要求